// 登录守卫工具 - 处理未登录状态下的表单按钮点击
import { isLoggedIn } from './user.js'

// 需要登录才能访问的页面路径
const AUTH_PAGES = [
  '/pages/my/index',
  '/pages/my/certificate',
  '/pages/my/completeInfo',
  '/pages/volunteer/index',
  '/pages/volunteer/detail',
  '/pages/vip/index',
  '/pages/vip/detail',
  '/pages/contributions/index',
  '/pages/moneyAndMaterials/index',
  '/pages/moneyAndMaterials/detail',
  '/pages/blood/index',
  '/pages/blood/detail',
  '/pages/jiuhu/index',
  '/pages/jiuyuan/index',
  '/pages/jiuzhu/index',
  '/pages/qiguan/index',
  '/pages/zaogan/index'
]

// 检查页面是否需要登录
const needAuth = (path) => {
  return AUTH_PAGES.some(authPath => path.startsWith(authPath))
}

// 显示登录提示弹框
const showLoginModal = (targetPath, actionType = 'navigate') => {
  return new Promise((resolve) => {
    uni.showModal({
      title: '登录提示',
      content: '此功能需要登录后才能使用，是否立即登录？',
      confirmText: '立即登录',
      cancelText: '取消',
      confirmColor: '#F9623E',
      success: (res) => {
        if (res.confirm) {
          // 用户点击"立即登录"，跳转到登录页面
          if (actionType === 'popup') {
            // 对于弹窗操作，存储操作类型和页面信息
            uni.setStorageSync('pending_popup_action', {
              page: targetPath,
              type: 'popup',
              timestamp: Date.now()
            })
          } else {
            // 对于页面跳转，存储目标路径
            uni.setStorageSync('redirect_after_login', targetPath)
          }
          
          uni.navigateTo({
            url: '/pages/login/index'
          })
          resolve(true) // 表示用户选择登录
        } else {
          // 用户点击"取消"，取消操作
          resolve(false) // 表示用户取消
        }
      },
      fail: () => {
        resolve(false)
      }
    })
  })
}

// 检查登录状态并处理跳转
export const checkLoginAndRedirect = async (targetPath) => {
  // 如果目标页面不需要登录，直接跳转
  if (!needAuth(targetPath)) {
    uni.navigateTo({
      url: targetPath
    })
    return true
  }
  
  // 检查是否已登录
  if (isLoggedIn()) {
    // 已登录，直接跳转
    uni.navigateTo({
      url: targetPath
    })
    return true
  }
  
  // 未登录，显示登录提示
  const shouldLogin = await showLoginModal(targetPath, 'navigate')
  return shouldLogin
}

// 处理登录成功后的跳转
export const handleLoginSuccess = () => {
  // 获取登录前要跳转的页面路径
  const redirectPath = uni.getStorageSync('redirect_after_login')
  
  if (redirectPath) {
    // 清除存储的路径
    uni.removeStorageSync('redirect_after_login')
    
    // 延迟跳转，确保登录状态已保存
    setTimeout(() => {
      uni.navigateTo({
        url: redirectPath
      })
    }, 100)
    return
  }
  
  // 检查是否有待执行的弹窗操作
  const pendingPopupAction = uni.getStorageSync('pending_popup_action')
  if (pendingPopupAction) {
    // 清除待执行操作标记
    uni.removeStorageSync('pending_popup_action')
    
    // 检查操作是否还有效（5分钟内）
    const isValid = Date.now() - pendingPopupAction.timestamp < 5 * 60 * 1000
    if (isValid) {
      // 返回到原页面，让用户重新点击按钮
      uni.showToast({
        title: '登录成功',
        icon: 'success',
        duration: 2000
      })
      
      setTimeout(() => {
        uni.navigateBack()
      }, 1000)
      return
    }
  }
  
  // 检查是否有其他待执行的操作
  const pendingAction = uni.getStorageSync('pending_action')
  if (pendingAction === 'retry') {
    // 清除待执行操作标记
    uni.removeStorageSync('pending_action')
    // 返回上一页，让用户重新点击按钮
    uni.showToast({
      title: '登录成功，请重新操作',
      icon: 'success',
      duration: 2000
    })
    
    setTimeout(() => {
      uni.navigateBack()
    }, 1000)
    return
  }
  
  // 没有存储的路径，跳转到首页
  uni.reLaunch({
    url: '/pages/index/index'
  })
}

// 通用的表单按钮点击处理函数
export const handleFormButtonClick = (targetPath) => {
  return checkLoginAndRedirect(targetPath)
}

// 检查登录状态，返回是否已登录
export const checkLoginStatus = () => {
  return isLoggedIn()
}

// 处理需要登录的弹窗操作（专门用于弹窗场景）
export const handleLoginRequiredPopup = async (currentPagePath = '/pages/index/index') => {
  if (isLoggedIn()) {
    // 已登录，返回true表示可以显示弹窗
    return true
  } else {
    // 未登录，显示登录提示
    const shouldLogin = await showLoginModal(currentPagePath, 'popup')
    // 如果用户选择登录，返回true；如果取消，返回false
    return shouldLogin
  }
}

// 处理需要登录的操作（通用版本，兼容旧代码）
export const handleLoginRequiredAction = (action, currentPagePath = '/pages/index/index') => {
  if (isLoggedIn()) {
    // 已登录，执行操作
    action()
    return true
  } else {
    // 未登录，显示登录提示
    showLoginModal(currentPagePath, 'popup').then((shouldLogin) => {
      if (!shouldLogin) {
        // 用户取消登录，可以在这里添加额外的处理逻辑
        console.log('用户取消登录')
      }
    })
    return false
  }
}

// 清理过期的待执行操作
export const cleanExpiredActions = () => {
  try {
    const pendingPopupAction = uni.getStorageSync('pending_popup_action')
    if (pendingPopupAction) {
      // 检查是否过期（5分钟）
      const isExpired = Date.now() - pendingPopupAction.timestamp > 5 * 60 * 1000
      if (isExpired) {
        uni.removeStorageSync('pending_popup_action')
      }
    }
  } catch (error) {
    console.error('清理过期操作失败:', error)
  }
} 